// 实验三 阶段二 使用工厂方法模式

// 抽象产品
abstract class TV {
    public abstract void assemble();
    public abstract void test();
    public abstract void pack();
    public abstract void displayInfo();
}

// 具体产品：LED电视
class LEDTV extends TV {
    @Override
    public void assemble() {
        System.out.println("组装LED电视组件");
    }

    @Override
    public void test() {
        System.out.println("测试LED电视功能");
    }

    @Override
    public void pack() {
        System.out.println("打包LED电视");
    }

    @Override
    public void displayInfo() {
        System.out.println("这是一台LED电视");
    }
}

// 具体产品：OLED电视
class OLEDTV extends TV {
    @Override
    public void assemble() {
        System.out.println("组装OLED电视组件");
    }

    @Override
    public void test() {
        System.out.println("测试OLED电视功能");
    }

    @Override
    public void pack() {
        System.out.println("打包OLED电视");
    }

    @Override
    public void displayInfo() {
        System.out.println("这是一台OLED电视");
    }
}

// 具体产品：TCL QLED电视
class TCLQLEDTV extends TV {
    @Override
    public void assemble() {
        System.out.println("组装TCL QLED电视组件");
    }

    @Override
    public void test() {
        System.out.println("测试TCL QLED电视功能");
    }

    @Override
    public void pack() {
        System.out.println("打包TCL QLED电视");
    }

    @Override
    public void displayInfo() {
        System.out.println("这是一台TCL QLED电视");
    }
}

// 具体产品：小米QLED电视
class XiaomiQLEDTV extends TV {
    @Override
    public void assemble() {
        System.out.println("组装小米QLED电视组件");
    }

    @Override
    public void test() {
        System.out.println("测试小米QLED电视功能");
    }

    @Override
    public void pack() {
        System.out.println("打包小米QLED电视");
    }

    @Override
    public void displayInfo() {
        System.out.println("这是一台小米QLED电视");
    }
}

// 抽象工厂类
abstract class TVFactory {
    // 工厂方法 - 由子类实现
    public abstract TV createTV();

    // 其他业务方法
    public void processTV() {
        TV tv = createTV(); // 调用工厂方法
        tv.assemble();
        tv.test();
        tv.pack();
        tv.displayInfo();
    }
}

// 具体工厂：TCL电视工厂
class TCLTVFactory extends TVFactory {
    @Override
    public TV createTV() {
        return new TCLQLEDTV(); // 创建TCL的QLED电视
    }
}

// 具体工厂：小米电视工厂
class XiaomiTVFactory extends TVFactory {
    @Override
    public TV createTV() {
        return new XiaomiQLEDTV(); // 创建小米的QLED电视
    }
}

// 具体工厂：LED电视工厂
class LEDTVFactory extends TVFactory {
    @Override
    public TV createTV() {
        return new LEDTV();
    }
}

// 具体工厂：OLED电视工厂
class OLEDTVFactory extends TVFactory {
    @Override
    public TV createTV() {
        return new OLEDTV();
    }
}

// 客户端
public class TvClient2 {
    public static void main(String[] args) {
        TVFactory tclFactory = new TCLTVFactory();
        tclFactory.processTV();

        TVFactory xiaomiFactory = new XiaomiTVFactory();
        xiaomiFactory.processTV();
    }
}
